Page({
  data: {
    activityId: '',
    activity: {
      id: '',
      title: '加载中...',
      timeRange: '',
      statusText: '',
      participantCount: 0,
      totalVotes: 0,
      viewCount: 0
    },
    candidates: [] as any[],
    loading: true,
    exporting: false
  },

  onLoad(options: any) {
    // 获取活动ID
    const activityId = options.id
    if (!activityId) {
      wx.showToast({
        title: '缺少活动ID',
        icon: 'error'
      })
      return
    }
    
    console.log('活动ID:', activityId)
    this.setData({ activityId })
    
    // 获取活动数据
    this.getActivityData()
  },

  onShow() {
    // 页面显示时刷新数据
    if (this.data.activityId) {
      this.getActivityData()
    }
  },

  // 获取活动统计数据
  async getActivityData() {
    this.setData({ loading: true })
    
    try {
      wx.showLoading({
        title: '加载数据中...'
      })

      const result = await wx.cloud.callFunction({
        name: 'dataExporter',
        data: {
          action: 'getStatistics',
          activityId: this.data.activityId
        }
      })

      const response = result.result as any
      if (response && response.success) {
        this.setData({
          activity: response.data.activity,
          candidates: response.data.candidates,
          loading: false
        })
        
        console.log('获取活动数据成功:', response.data)
      } else {
        throw new Error(response?.message || '获取活动数据失败')
      }
    } catch (error: any) {
      console.error('获取活动数据失败:', error)
      wx.showModal({
        title: '加载失败',
        content: '获取活动数据失败：' + (error.message || '网络错误'),
        showCancel: false
      })
      
      this.setData({ loading: false })
    } finally {
      wx.hideLoading()
    }
  },

  // 导出Excel数据
  async exportData() {
    if (this.data.exporting) {
      return
    }

    this.setData({ exporting: true })

    try {
      wx.showLoading({
        title: '生成Excel中...'
      })

      console.log('开始导出数据，活动ID:', this.data.activityId)

      const result = await wx.cloud.callFunction({
        name: 'dataExporter',
        data: {
          action: 'exportExcel',
          activityId: this.data.activityId
        }
      })

      wx.hideLoading()

      const response = result.result as any
      if (response && response.success) {
        const { fileName, downloadUrl, statistics } = response.data
        
        console.log('Excel导出成功:', response.data)

        // 显示导出成功的详细信息
        wx.showModal({
          title: '导出成功',
          content: `文件：${fileName}
活动：${statistics.activityTitle}
候选人：${statistics.candidateCount}位
总票数：${statistics.totalVotes}票
参与人数：${statistics.participantCount}人
浏览量：${statistics.viewCount}次

点击确定开始下载`,
          confirmText: '下载',
          cancelText: '取消',
          success: (res) => {
            if (res.confirm) {
              this.downloadAndShareFile(downloadUrl, fileName)
            }
          }
        })
      } else {
        throw new Error(response?.message || '导出Excel失败')
      }
    } catch (error: any) {
      console.error('导出Excel失败:', error)
      wx.hideLoading()
      
      wx.showModal({
        title: '导出失败',
        content: '导出Excel失败：' + (error.message || '网络错误'),
        showCancel: false
      })
    } finally {
      this.setData({ exporting: false })
    }
  },

  // 下载并分享文件
  async downloadAndShareFile(downloadUrl: string, fileName: string) {
    try {
      wx.showLoading({
        title: '下载文件中...'
      })

      // 下载文件到本地
      const downloadResult = await new Promise<WechatMiniprogram.DownloadFileSuccessCallbackResult>((resolve, reject) => {
        wx.downloadFile({
          url: downloadUrl,
          success: resolve,
          fail: reject
        })
      })

      wx.hideLoading()

      if (downloadResult.statusCode === 200) {
        console.log('文件下载成功:', downloadResult.tempFilePath)

        // 显示操作选项
        wx.showActionSheet({
          itemList: ['预览文件', '分享文件', '保存到相册'],
          success: async (res) => {
            switch (res.tapIndex) {
              case 0:
                // 预览文件
                this.previewFile(downloadResult.tempFilePath, fileName)
                break
              case 1:
                // 分享文件
                this.shareFile(downloadResult.tempFilePath, fileName)
                break
              case 2:
                // 保存文件（实际上Excel不能保存到相册，这里显示提示）
                wx.showModal({
                  title: '保存提示',
                  content: 'Excel文件无法保存到相册，请选择分享或预览选项',
                  showCancel: false
                })
                break
            }
          }
        })
      } else {
        throw new Error('文件下载失败')
      }
    } catch (error: any) {
      console.error('下载文件失败:', error)
      wx.hideLoading()
      
      wx.showModal({
        title: '下载失败',
        content: '文件下载失败：' + (error.message || '网络错误'),
        showCancel: false
      })
    }
  },

  // 预览文件
  previewFile(filePath: string, fileName: string) {
    wx.openDocument({
      filePath: filePath,
      fileType: 'xlsx',
      success: () => {
        console.log('文件预览成功')
      },
      fail: (error) => {
        console.error('文件预览失败:', error)
        wx.showModal({
          title: '预览失败',
          content: '无法预览Excel文件，请尝试分享到其他应用打开',
          showCancel: false
        })
      }
    })
  },

  // 分享文件
  shareFile(filePath: string, fileName: string) {
    // 使用基础的转发分享功能
    const pages = getCurrentPages()
    const currentPage = pages[pages.length - 1]
    
    // 先保存文件信息到全局变量供分享使用
    getApp().globalData = getApp().globalData || {}
    getApp().globalData.shareFile = {
      filePath: filePath,
      fileName: fileName
    }
    
    // 引导用户通过右上角菜单分享
    wx.showModal({
      title: '分享文件',
      content: `文件已准备好：${fileName}\n\n请通过以下方式分享：\n1. 点击右上角"..."菜单\n2. 选择"转发"或"分享到朋友圈"\n3. 或长按保存后通过其他方式发送`,
      confirmText: '我知道了',
      showCancel: false,
      success: () => {
        // 显示成功提示
        wx.showToast({
          title: '文件已准备好分享',
          icon: 'success'
        })
      }
    })
  },

  // 返回上一页
  goBack() {
    wx.navigateBack()
  }
}) 